package com.itheima.bufferedinputstream;

import java.io.*;

public class Test {

    public static void main(String[] args) {

        //使用字节流完成文件复制操作（任何文件的底层都是字节）
        //源文件：D:\\a.txt
        //目标文件：D:\\a_new.txt（复制过去时一定要带文件名）

        //JDK 7 提供了更简单的资源释放方案：try-with-resources

        //缓冲字节流的作用：提高字节流的读写效率（自带8KB的缓冲区）

        copyFile("D:\\a.txt", "D:\\a_new.txt");


    }

    public static void copyFile(String srcPath, String destPath) {

        try (//这里只能放置资源对象，用完后，会自动关调用其close方法关闭
             //资源一般指的是最终实现了AutoCloseable接口的类对象

             InputStream fis = new FileInputStream(srcPath);
             //把低级的字节输入输出流包装成高级的缓冲字节输入输出流（功能不变，性能上有提高）
             InputStream bis = new BufferedInputStream(fis);

             OutputStream fos = new FileOutputStream(destPath);
             //把低级的字节输出流包装成高级的缓冲字节输出流（功能不变，性能上有提高）
             OutputStream bos = new BufferedOutputStream(fos);
        ) {

            //3.将输入流中的字节，按照一定的规律，写入到输出流中
            byte[] buffer = new byte[1024];
            int len;
            while ((len = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, len);      //读取多少字节，就写入多少字节
            }
            System.out.println("复制成功！");

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
